home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 050 / madtrb31.arc / FASTWRIT.PAS < prev    next >
Pascal/Delphi Source File  |  1985-05-15  |  3KB  |  69 lines

  1. {            FASTWRITE routine and example.
  2.                 Code by Marshall Brain.
  3.     This program contains a routine called FASTWRITE, that can
  4. be used on the IBM PC, XT, and compatibles to update the screen
  5. much faster than can be done with write statements. It handles
  6. graphics and monochrome screens.
  7.     As can be seen, four variables are passed to Fastwrite. They
  8. are: the cursor's column location to begin printing (0..79), the
  9. cursor's row location (0..24), the screen attribute (contols
  10. color, underlining, and intensity), and the string to be printed.
  11. A typical call to fastwrite would be as follows:
  12.  
  13.      tempstring:='Fastwrite is fast as lightning';
  14.      fastwrite(15,10,$07,tempstring);
  15.  
  16. This would print tempstring at location (15,10), with characters
  17. that are white on black (if you are not familiar with attribute
  18. bytes, look them up in the Technical Reference manual, or get a
  19. book such as "Inside the IBM PC" by Peter Norton).
  20.     These four parameters are crucial to Fastwrite's speed. In
  21. order to write to the screen as quickly as it does, Fastwrite
  22. ignores all of the normal channels used for screen updating such
  23. as DOS and BIOS calls. Instead, it dumps the string to be
  24. displayed directly into the display's memory buffer. The
  25. advantage of speed is gained, but in the process you lose the
  26. use of the gotoxy statement, the color statements, and
  27. windowing. If you like, you can mix Fastwrite and regular write
  28. statements and continue to make use of some of these features. Or
  29. you can, as I have, create new routines to handle windows,
  30. gotoxy, etc.
  31.     An article on this routine was submitted to the TUG
  32. newsletter in October - it contains code listings, etc, but
  33. it has not been printed and I have not been told when it will
  34. be printed. If there is any demand, I can upload the source code
  35. for FASTWRITE.
  36.      Good luck using this routine.  MB.   }
  37.  
  38.  
  39. program fasttest;
  40. type
  41.   string80 = string[80];
  42. var
  43.   x:string[80];
  44.   y : byte;
  45.  
  46. procedure fastwrite(col,row,attrib:byte;str:string80);
  47. begin
  48.   inline
  49.     ($1E/$1E/$8A/$86/row/$B3/$50/$F6/$E3/$2B/$DB/$8A/$9E/col/
  50.      $03/$C3/$03/$C0/$8B/$F8/$be/$00/$00/$8A/$BE/attrib/
  51.      $8a/$8e/str/$22/$c9/$74/$3e/$2b/$c0/$8E/$D8/$A0/$49/$04/
  52.      $1F/$2C/$07/$74/$22/$BA/$00/$B8/$8E/$DA/$BA/$DA/$03/$46/
  53.      $8a/$9A/str/$EC/$A8/$01/$75/$FB/$FA/$EC/$A8/$01/$74/$FB/
  54.      $89/$1D/$47/$47/$E2/$Ea/$2A/$C0/$74/$10/$BA/$00/$B0/
  55.      $8E/$DA/$46/$8a/$9A/str/$89/$1D/$47/$47/$E2/$F5/$1F);
  56. end;
  57.  
  58. begin
  59.   clrscr;
  60.   fastwrite(35,10,$0f,'Get Ready');
  61.   delay(2000);clrscr;
  62.   fastwrite(33,5,$0f,'Fastwriting is');
  63.   fastwrite(35,6,$0f,'faster than');
  64.   fastwrite(32,7,$0f,'a speeding bullet!');
  65.   x:='012345678901234567890123456789012345678901234567890123456789';
  66.   for y:=9 to 18 do
  67.     fastwrite(10,y,$0f,x);
  68.   gotoxy(1,20);
  69. end.